home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / X11R4 / cmds / X / ddx / Xsun / patches / sunIo.c.patch < prev    next >
Encoding:
Text File  |  1991-11-05  |  10.5 KB  |  371 lines

  1. *** /tmp/,RCSt1659773    Mon Nov  4 17:41:22 1991
  2. --- sunIo.c    Tue Jul 24 18:01:22 1990
  3. ***************
  4. *** 49,68 ****
  5.   
  6.   #include    "sun.h"
  7.   #include    "opaque.h"
  8.   
  9.   int            lastEventTime = 0;
  10. ! extern int    sunSigIO;
  11.   extern int      screenIsSaved;
  12.   extern void    SaveScreens();
  13.   
  14. ! #ifdef SUN_WINDOWS
  15. ! int    windowFd = 0;
  16. ! int    sunIgnoreEvent = TRUE;
  17. ! #define    INPBUFSIZE    128
  18. ! #endif SUN_WINDOWS
  19.   
  20.   /*-
  21.    *-----------------------------------------------------------------------
  22.    * TimeSinceLastInputEvent --
  23.    *    Function used for screensaver purposes by the os module.
  24.    *
  25. --- 49,85 ----
  26.   
  27.   #include    "sun.h"
  28.   #include    "opaque.h"
  29. + #include    <sys/time.h>
  30.   
  31.   int            lastEventTime = 0;
  32. ! extern int    spriteCheckInput;
  33.   extern int      screenIsSaved;
  34.   extern void    SaveScreens();
  35.   
  36. ! extern unsigned int    repeatLong, repeatShort;
  37.   
  38.   /*-
  39.    *-----------------------------------------------------------------------
  40. +  * sunInputAvail --
  41. +  *    This function is called from the scheduler whenever one of
  42. +  *    the devices we told it to look for has input waiting.
  43. +  *
  44. +  * Results:
  45. +  *    None.
  46. +  *
  47. +  * Side Effects:
  48. +  *    spriteCheckInput has its READ_INPUT flag set.
  49. +  *
  50. +  *-----------------------------------------------------------------------
  51. +  */
  52. + void
  53. + sunInputAvail()
  54. + {
  55. +     spriteCheckInput = 1;
  56. + }
  57. + /*-
  58. +  *-----------------------------------------------------------------------
  59.    * TimeSinceLastInputEvent --
  60.    *    Function used for screensaver purposes by the os module.
  61.    *
  62. ***************
  63. *** 106,285 ****
  64.   void
  65.   ProcessInputEvents ()
  66.   {
  67. !     register Firm_event    *ptrEvents,        /* Current pointer event */
  68. !                *kbdEvents;            /* Current keyboard event */
  69. !     register int        numPtrEvents,     /* Number of remaining pointer
  70. !                          * events */
  71. !                 numKbdEvents;       /* Number of remaining
  72. !                          * keyboard events */
  73. !     int                      nPE,                /* Original number of pointer
  74. !                          * events */
  75. !                 nKE;                /* Original number of
  76. !                          * keyboard events */
  77. !     Bool            PtrAgain,        /* need to (re)read */
  78. !                 KbdAgain;        /* need to (re)read */
  79. !     DevicePtr            pPointer;
  80. !     DevicePtr            pKeyboard;
  81. !     register PtrPrivPtr     ptrPriv;
  82. !     register KbPrivPtr        kbdPriv;
  83. !     Firm_event              *lastEvent;            /* Last event processed */
  84.       enum {
  85.       NoneYet, Ptr, Kbd
  86.       }                lastType = NoneYet;    /* Type of last event */
  87.   
  88. - #ifdef SUN_WINDOWS
  89. -     struct inputevent sunevents[INPBUFSIZE];
  90. -     register struct inputevent *se = sunevents, *seL;
  91. -     int         n;
  92. - #endif SUN_WINDOWS
  93. -     sunSigIO = 0;
  94.       pPointer = LookupPointerDevice();
  95.       pKeyboard = LookupKeyboardDevice();
  96.   
  97. -     if ( sunUseSunWindows() ) {
  98. - #ifdef SUN_WINDOWS
  99. -     if ((n=read(windowFd,sunevents,INPBUFSIZE*sizeof sunevents[0])) < 0 
  100. -                 && errno != EWOULDBLOCK) {
  101. -         /*
  102. -          * Error reading events; should do something. XXX
  103. -          */
  104. - /*debug*/
  105. -     ErrorF("ProcessInputEvents: read(windowFd)  n=%d\n",n);
  106. -         return;
  107. -     }
  108. -     if (autoRepeatKeyDown && autoRepeatReady && n <= 0) {
  109. -         /* fake a sunwindows kbd event */
  110. -         n = sizeof(struct inputevent);
  111. -         se->ie_code = AUTOREPEAT_EVENTID;
  112. -         tvplus(event_time(se), autoRepeatLastKeyDownTv,
  113. -                             autoRepeatDeltaTv);
  114. -         if (autoRepeatDebug)
  115. -             ErrorF("ProcessInputEvents: sw auto event\n");
  116. -     }
  117. -     for (seL = sunevents + (n/(sizeof sunevents[0]));  se < seL; se++) {
  118. -         if (screenIsSaved == SCREEN_SAVER_ON)
  119. -         SaveScreens(SCREEN_SAVER_OFF, ScreenSaverReset);
  120. -         lastEventTime = TVTOMILLI(event_time(se));
  121. -         /*
  122. -          * Decide whether or not to pay attention to events.
  123. -          * Ignore the events if the locator has exited X Display.
  124. -          */
  125. -         switch (event_id(se)) {
  126. -         case KBD_DONE:
  127. -             sunChangeKbdTranslation( pKeyboard, FALSE );
  128. -             break;
  129. -         case KBD_USE:
  130. -             sunChangeKbdTranslation( pKeyboard, TRUE );
  131. -             break;
  132. -         case LOC_WINENTER:
  133. -             sunIgnoreEvent = FALSE;
  134. -             break;
  135. -         case LOC_WINEXIT:
  136. -             sunIgnoreEvent = TRUE;
  137. -             break;
  138. -         }
  139. -         if (sunIgnoreEvent) {
  140. -         continue;
  141. -         }
  142. -         /*
  143. -          * Figure out the X device this event should be reported on.
  144. -          */
  145. -         switch (event_id(se)) {
  146. -         case LOC_MOVE:
  147. -         case MS_LEFT:
  148. -         case MS_MIDDLE:
  149. -         case MS_RIGHT:
  150. -             sunMouseProcessEventSunWin(pPointer,se);
  151. -             break;
  152. -         case LOC_WINEXIT:
  153. -         case LOC_WINENTER:
  154. -         case KBD_DONE:
  155. -         case KBD_USE:
  156. -             break;
  157. -         default:
  158. -             sunKbdProcessEventSunWin(pKeyboard,se);
  159. -             break;
  160. -         }
  161. -     }
  162. - #endif SUN_WINDOWS
  163. -     } 
  164. -     else {
  165.       ptrPriv = (PtrPrivPtr)pPointer->devicePrivate;
  166.       kbdPriv = (KbPrivPtr)pKeyboard->devicePrivate;
  167.       
  168. -     numPtrEvents = 0;
  169. -     PtrAgain = TRUE;
  170. -     numKbdEvents = 0;
  171. -     KbdAgain = TRUE;
  172. -     lastEvent = (Firm_event *)0;
  173.       /*
  174. !      * So long as one event from either device remains unprocess, we loop:
  175. !      * Take the oldest remaining event and pass it to the proper module
  176. !      * for processing. The DDXEvent will be sent to ProcessInput by the
  177. !      * function called.
  178.        */
  179. !     while (1) {
  180. !         /*
  181. !          * Get events from both the pointer and the keyboard, storing the number
  182. !          * of events gotten in nPE and nKE and keeping the start of both arrays
  183. !          * in pE and kE
  184. !          */
  185. !         if ((numPtrEvents == 0) && PtrAgain) {
  186. !         ptrEvents = (* ptrPriv->GetEvents) (pPointer, &nPE, &PtrAgain);
  187. !         numPtrEvents = nPE;
  188. !         }
  189. !         if ((numKbdEvents == 0) && KbdAgain) {
  190. !         kbdEvents = (* kbdPriv->GetEvents) (pKeyboard, &nKE, &KbdAgain);
  191. !         numKbdEvents = nKE;
  192. !         }
  193. !         if ((numPtrEvents == 0) && (numKbdEvents == 0))
  194. !         break;
  195. !         if (numPtrEvents && numKbdEvents) {
  196. !         if (timercmp (&kbdEvents->time, &ptrEvents->time, <)) {
  197.               if (lastType == Ptr) {
  198.               (* ptrPriv->DoneEvents) (pPointer, FALSE);
  199. -             }
  200. -             (* kbdPriv->ProcessEvent) (pKeyboard, kbdEvents);
  201. -             numKbdEvents--;
  202. -             lastEvent = kbdEvents++;
  203.               lastType = Kbd;
  204. !         } else {
  205.               if (lastType == Kbd) {
  206.               (* kbdPriv->DoneEvents) (pKeyboard, FALSE);
  207. -             }
  208. -             (* ptrPriv->ProcessEvent) (pPointer, ptrEvents);
  209. -             numPtrEvents--;
  210. -             lastEvent = ptrEvents++;
  211.               lastType = Ptr;
  212.           }
  213. !         } else if (numKbdEvents) {
  214. !         if (lastType == Ptr) {
  215. !             (* ptrPriv->DoneEvents) (pPointer, FALSE);
  216. !         }
  217. !         (* kbdPriv->ProcessEvent) (pKeyboard, kbdEvents);
  218. !         numKbdEvents--;
  219. !         lastEvent = kbdEvents++;
  220. !         lastType = Kbd;
  221.           } else {
  222. !         if (lastType == Kbd) {
  223. !             (* kbdPriv->DoneEvents) (pKeyboard, FALSE);
  224. !         }
  225. !         (* ptrPriv->ProcessEvent) (pPointer, ptrEvents);
  226. !         numPtrEvents--;
  227. !         lastEvent = ptrEvents++;
  228. !         lastType = Ptr;
  229.           }
  230.       }
  231.   
  232.       if (lastEvent) {
  233. -         lastEventTime = TVTOMILLI(lastEvent->time);
  234.           if (screenIsSaved == SCREEN_SAVER_ON) {
  235.           SaveScreens(SCREEN_SAVER_OFF, ScreenSaverReset);
  236.           }
  237. --- 123,177 ----
  238.   void
  239.   ProcessInputEvents ()
  240.   {
  241. !     register Mouse_Event    *events;         /* Array of events */
  242. !     register int          numEvents;        /* Number of events left */
  243. !     int                      nE;                /* Total number of events */
  244. !     DevicePtr            pPointer;        /* System pointer */
  245. !     DevicePtr            pKeyboard;        /* System keyboard */
  246. !     register PtrPrivPtr     ptrPriv;        /* Private data for pointer */
  247. !     register KbPrivPtr        kbdPriv;        /* Private data for keyboard */
  248. !     Mouse_Event          *lastEvent;        /* Last event processed */
  249.       enum {
  250.       NoneYet, Ptr, Kbd
  251.       }                lastType = NoneYet;    /* Type of last event */
  252.   
  253.       pPointer = LookupPointerDevice();
  254.       pKeyboard = LookupKeyboardDevice();
  255.       
  256.       ptrPriv = (PtrPrivPtr)pPointer->devicePrivate;
  257.       kbdPriv = (KbPrivPtr)pKeyboard->devicePrivate;
  258.       
  259.       /*
  260. !      * Get events from both the pointer and the keyboard via the keyboard's
  261. !      * GetEvents vector. The number of events read is stored in numEvents.
  262.        */
  263. !     events = (* kbdPriv->GetEvents) (pKeyboard, &nE);
  264. !     numEvents = nE;
  265. !     
  266. !     while (numEvents) {
  267. !     if (events->flags & KEYBOARD_EVENT) {
  268.           if (lastType == Ptr) {
  269.               (* ptrPriv->DoneEvents) (pPointer, FALSE);
  270.               lastType = Kbd;
  271. !         }
  272. !         (* kbdPriv->ProcessEvent) (pKeyboard, events);
  273. !     } else if (events->flags & MOUSE_EVENT) {
  274.           if (lastType == Kbd) {
  275.               (* kbdPriv->DoneEvents) (pKeyboard, FALSE);
  276.               lastType = Ptr;
  277.           }
  278. !         (* ptrPriv->ProcessEvent) (pPointer, events);
  279.       } else {
  280. !         /* ??? */
  281.       }
  282. +     lastEvent = events;
  283. +     lastEventTime = events->time;
  284. +     numEvents -= 1;
  285. +     events += 1;
  286.       }
  287.       
  288. +     SetTimeSinceLastInputEvent();
  289.       if (lastEvent) {
  290.       if (screenIsSaved == SCREEN_SAVER_ON) {
  291.           SaveScreens(SCREEN_SAVER_OFF, ScreenSaverReset);
  292.       }
  293. ***************
  294. *** 288,295 ****
  295.       (* kbdPriv->DoneEvents) (pKeyboard, TRUE);
  296.       (* ptrPriv->DoneEvents) (pPointer, TRUE);
  297.   
  298. !     }
  299.   }
  300.   
  301.   
  302. --- 180,186 ----
  303.       (* kbdPriv->DoneEvents) (pKeyboard, TRUE);
  304.       (* ptrPriv->DoneEvents) (pPointer, TRUE);
  305.   
  306. !     spriteCheckInput = 0;
  307.   }
  308.   
  309.   
  310. ***************
  311. *** 341,357 ****
  312.   
  313.       if (strcmp (argv[i], "-ar1") == 0) {    /* -ar1 int */
  314.       if (++i >= argc) UseMsg ();
  315. !     autoRepeatInitiate = 1000 * (long)atoi(argv[i]);
  316.       return 2;
  317.       }
  318.       if (strcmp (argv[i], "-ar2") == 0) {    /* -ar2 int */
  319.       if (++i >= argc) UseMsg ();
  320. !     autoRepeatDelay = 1000 * (long)atoi(argv[i]);
  321.       return 2;
  322.       }
  323.       if (strcmp (argv[i], "-debug") == 0) {    /* -debug */
  324.       return 1;
  325.       }
  326.       if (strcmp (argv[i], "-dev") == 0) {    /* -dev /dev/mumble */
  327.       if (++i >= argc) UseMsg ();
  328.       return 2;
  329. --- 232,250 ----
  330.   
  331.       if (strcmp (argv[i], "-ar1") == 0) {    /* -ar1 int */
  332.       if (++i >= argc) UseMsg ();
  333. !     repeatLong = 1000 * (long)atoi(argv[i]);
  334.       return 2;
  335.       }
  336.       if (strcmp (argv[i], "-ar2") == 0) {    /* -ar2 int */
  337.       if (++i >= argc) UseMsg ();
  338. !     repeatShort = 1000 * (long)atoi(argv[i]);
  339.       return 2;
  340.       }
  341. + #ifndef    sprite
  342.       if (strcmp (argv[i], "-debug") == 0) {    /* -debug */
  343.       return 1;
  344.       }
  345. + #endif    sprite
  346.       if (strcmp (argv[i], "-dev") == 0) {    /* -dev /dev/mumble */
  347.       if (++i >= argc) UseMsg ();
  348.       return 2;
  349. ***************
  350. *** 371,378 ****
  351. --- 264,273 ----
  352.   {
  353.       ErrorF("-ar1 int               set autorepeat initiate time\n");
  354.       ErrorF("-ar2 int               set autorepeat interval time\n");
  355. + #ifndef    sprite
  356.       ErrorF("-debug                 disable non-blocking console mode\n");
  357.       ErrorF("-dev filename          name of device to open\n");
  358. + #endif    sprite
  359.       ErrorF("-mono                  force monochrome-only screen\n");
  360.       ErrorF("-zaphod                disable active Zaphod mode\n");
  361.   }
  362.